package com.ly.tankgame02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

/**
 * 坦克大站绘图区
 */

public class MyPanel extends JPanel implements KeyListener {
    //定义我的坦克
    Hero hero=null;
    //定义敌人的坦克，放入到Vector
    Vector<EnemyTank> enemyTanks=new Vector<>();
    int enemyTankSize=3;
    public MyPanel(){
        hero=new Hero(100,100);//初始化一个坦克
        //初始化敌人坦克
        for (int i = 0; i <enemyTankSize ; i++) {
            //创建一个敌人的坦克
            EnemyTank enemyTank = new EnemyTank((100 * (i + 1)), 0);
            //设置方向
            enemyTank.setDirect(2);
            //加入
            enemyTanks.add(enemyTank);
        }
    }



    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillRect(0,0,1000,750);//填充矩形，默认黑色
        //画出坦克-封装方法
        drawTank(hero.getX(),hero.getY(),g,hero.getDirect(),1);
        //画出敌人的坦克,遍历Vector
        for (int i = 0; i <enemyTanks.size() ; i++) {
            //取出坦克
            EnemyTank enemyTank = enemyTanks.get(i);
            drawTank(enemyTank.getX(),enemyTank.getY(),g,enemyTank.getDirect(),0);
        }


    }
    //编写方法，画出坦克

    /**
     *
     * @param x 坦克左上角的x坐标
     * @param y 坦克左上角的y坐标
     * @param g 画笔
     * @param direct 坦克方向(0:表示向上 1：表示向右 2：表示向下 3：表示向左)
     * @param type 坦克类型
     */
    public void drawTank(int x,int y,Graphics g,int direct,int type){
       //根据不同类型坦克，设置不同颜色
        switch (type){
            case 0: //敌人的坦克
                g.setColor(Color.cyan);
                break;
            case 1: //我的坦克
                g.setColor(Color.yellow);
                break;
        }
        //根据坦克方向，来绘制对应形状坦克
        //
        switch (direct){
            case 0://表示向上
                g.fill3DRect(x,y,10,60,false);//左边轮子
                g.fill3DRect(x+30,y,10,60,false);//右边轮子
                g.fill3DRect(x+10,y+10,20,40,false);//中间
                g.fillOval(x+10,y+20,20,20);//盖
                g.drawLine(x+20,y+30,x+20,y);// 炮口
                break;
            case 1://向 左
                g.fill3DRect(x,y,60,10,false);//左边轮子
                g.fill3DRect(x,y+30,60,10,false);//右边轮子
                g.fill3DRect(x+10,y+10,40,20,false);//中间
                g.fillOval(x+20,y+10,20,20);//盖
                g.drawLine(x+30,y+20,x+60,y+20);// 炮口
                break;
            case 2: //向下
                g.fill3DRect(x,y,10,60,false);//左边轮子
                g.fill3DRect(x+30,y,10,60,false);//右边轮子
                g.fill3DRect(x+10,y+10,20,40,false);//中间
                g.fillOval(x+10,y+20,20,20);//盖
                g.drawLine(x+20,y+30,x+20,y+60);// 炮口
                break;
            case 3: //向右
                g.fill3DRect(x,y,60,10,false);//左边轮子
                g.fill3DRect(x,y+30,60,10,false);//右边轮子
                g.fill3DRect(x+10,y+10,40,20,false);//中间
                g.fillOval(x+20,y+10,20,20);//盖
                g.drawLine(x+30,y+20,x,y+20);// 炮口
                break;
            default:
                System.out.println("暂时没有处理");
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }
    //处理wdsa键
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode()==KeyEvent.VK_W){ //按下W键
            //改变坦克的方向
            hero.setDirect(0);//
            //修改坦克的坐标 y+=1
            hero.setY(hero.getY()-5);
        }else if (e.getKeyCode()==KeyEvent.VK_D){
            hero.setDirect(1);
            //修改坦克的坐标 y+=1
            hero.setX(hero.getX()+5);
        }else if (e.getKeyCode()==KeyEvent.VK_S){
            hero.setDirect(2);
            //修改坦克的坐标 y+=1
            hero.setY(hero.getY()+5);
        }else if (e.getKeyCode()==KeyEvent.VK_A){
            hero.setDirect(3);
            //修改坦克的坐标 y+=1
            hero.setX(hero.getX()-5);
        }
        //让面板重绘
        this.repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
}
